题目描述
二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
例如,上面的二进制手表读取 “3:25”。
给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。
案例:
输入: n = 1
返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]
分析
这是一道比较实际的题目,由于我们不知道具体n为几,所以用回溯算法是比较合适的。
而题目中由于限定了顶部的四个代表了0-11小时,底部的0-59代表分钟。所以我们不用考虑进位的问题。所以当有超过这个限制的,我们需要进行剪枝,否则最后的结果就错了。
递归结构
w代表从nums中选出一个数字。
递归边界
if (n == step)
递归参数
- n:亮灯数量
- step:递归层数
- start:开始节点
- result:单次结果
- result_all:最终结果
其他处理
- 分别计算小时和分钟,若超过0-11和0-59,则进行剪枝,所以需要写一个函数,判断当前合不合理
- 将所有灯组成nums=[1, 2, 4, 8, 1, 2, 4, 8, 16, 32]=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- 写一个函数,将nums处理成正确的时间
答案
1 | class Solution(object): |